package com.tool.cn.util;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 配置文件获取类
 * 
 * @author wangzh 2016年9月18日 上午9:12:32
 */
public final class PropUtil {

	private static final Log log = LogFactory.getLog(PropUtil.class);

	public static PropUtil util = null;

	/**
	 * 获取本服务类的实例
	 * 
	 * @return
	 */
	public static PropUtil getInstance() {
		if (util != null) {
			return util;
		} else {
			return new PropUtil();
		}
	}

	/**
	 * 根据文件名加载src下配置文件
	 */
	public static Properties getProperties(String configName) {
		return getProperties(configName, "");
	}

	/**
	 * 根据文件名加载src下配置文件
	 */
	public static Properties getProperties(String configName, String encoded) {
		Properties properties=new Properties();
		try {
			InputStream inputStream = getInstance().getClass().getClassLoader().getResourceAsStream(configName);
			if(StringUtil.isEmpty(encoded)){
				properties.load(inputStream);
				inputStream.close();
			}else{
				InputStreamReader input = new InputStreamReader(inputStream, "utf-8");
				properties.load(input);
				input.close();
				inputStream.close();
			}
			
		} catch (IOException e1) {
			log.warn(e1, e1);
		}
		return properties;
	}

	/**
	 * 全路径加载配置文件
	 */
	public static Properties getlocalProperties(String path) {
		Properties configProperties = null;
		FileInputStream inputStream = null;
		try {
			configProperties = new Properties();
			inputStream = new FileInputStream(path);
			configProperties.load(inputStream);
			inputStream.close();
		} catch (IOException e1) {
			log.warn(e1, e1);
		} finally {
			if (inputStream != null) {
				try {
					inputStream.close();
				} catch (IOException e) {
					log.error("close input stream failure:" + e);
				}
			}
		}
		return configProperties;
	}

	/**
	 * 获取字符型属性（默认值为空字符串）
	 */
	public static String getString(Properties props, String key) {
		return getString(props, key, "");
	}

	/**
	 * 获取字符型属性
	 */
	public static String getString(Properties props, String key, String defaultValue) {
		String value = defaultValue;
		if (props.containsKey(key)) {
			value = props.getProperty(key);
		}
		return value;
	}

	/**
	 * 获取数值型属性（默认值0）
	 */
	public static int getInt(Properties props, String key) {
		return getInt(props, key, 0);
	}

	/**
	 * 获取数值型属性（可指定默认值）
	 */
	public static int getInt(Properties props, String key, int defaultValue) {
		int value = defaultValue;
		if (props.containsKey(key)) {
			value = CastUtil.castInt(props.getProperty(key));
		}
		return value;
	}

	/**
	 * 获取布尔型属性
	 */
	public static boolean getBoolean(Properties props, String key) {
		return getBoolean(props, key, false);
	}

	/**
	 * 获取布尔型属性（可指定默认值）
	 */
	public static boolean getBoolean(Properties props, String key, Boolean defaultValue) {
		boolean value = defaultValue;
		if (props.containsKey(key)) {
			value = CastUtil.castBoolean(props.getProperty(key));
		}
		return value;
	}
}
